<?php
/**
 * Created by PhpStorm.
 * User: man0sions
 * Date: 16/8/30
 * Time: 下午4:26
 */

namespace src\Factory;


use src\base\AppException;

/**
 * 数据格式抽象接口
 * 子类不需要实现任何功能,只需要实现"属性"即可
 * 该类的作用是保证数据字段的正确性
 *
 * Class DataFormat
 * @package src\Factory
 */

abstract class DataFormat
{
    /**
     * 对属性赋值
     * @param \stdClass $class
     */
    function format(\stdClass $class)
    {

        foreach($class as $key=>$item)
        {
            $this->$key = $item;

        }
    }

    /**
     * 返回正确的属性和值
     * @return \stdClass
     */
    function getAttributes(){
        $attributes = new \stdClass();
        $ref = new \ReflectionClass($this);
        foreach($ref->getProperties() as $item)
        {
            $name = $item->name;
            $attributes->$name = $this->$name;
        }
        return $attributes;
    }

    /**
     * 如果属性为定义,则不允许赋值,让子类实现字段的校验
     *
     * @param $name
     * @param $value
     * @throws AppException
     */
    function __set($name,$value){
        throw new AppException(__CLASS__." ====> not exits attribute: {$name}");
    }
}